package nxu.it.dao.Impl;

import nxu.it.dao.JdbiFactory;
import nxu.it.dao.TodoDao;
import nxu.it.dao.TodoStorage;
import nxu.it.model.Todo;
import org.jdbi.v3.core.Jdbi;

import java.util.List;
import java.util.Optional;

public class JdbiTodoStorage implements TodoStorage {
    private static final Jdbi JDBI = JdbiFactory.getJdbi();

    @Override
    public List<Todo> list() {
//        String sql = "SELECT id, content, complete, create_at, update_at FROM todo";
//        List<Todo> todoList = JDBI.withHandle(handle->
//            handle.createQuery(sql)
//                    .mapToBean(Todo.class)
//                    .list()
//        );
//        return todoList;
        return JDBI.withExtension(TodoDao.class, dao->dao.list());
    }

    @Override
    public Boolean save(Todo todo) {
//        if(todo == null){
//            return false;
//        }
//        String sql = "Insert INTO todo (content, complete, create_at, update_at) VALUES (:content,:complete,:create_at,:update_at)";
//        JDBI.withHandle(handle->
//                handle.createUpdate(sql)
//                        .bind("complete",todo.getComplete())
//                        .bind("content",todo.getContent())
//                        .bind("create_at",todo.getCreateAt())
//                        .bind("update_at",todo.getUpdateAt())
//                        .execute()
//        );
//        return true;
        return JDBI.withExtension(TodoDao.class, dao->{
           try{
               dao.save(todo);
           }catch (Exception e){
               return false;
           }
           return true;
        });
    }

    @Override
    public Boolean update(Todo todo) {
        if(todo == null){
            return false;
        }
        return JDBI.withExtension(TodoDao.class, dao->{
            try{
                dao.update(todo);
            }catch (Exception e){
                return false;
            }
            return true;
        });
    }

    @Override
    public Optional<Todo> get(int id) {
        return JDBI.withExtension(TodoDao.class, dao->dao.get(id));
    }

    @Override
    public Boolean delete(int id) {
        return JDBI.withExtension(TodoDao.class, dao->{
            try{
                dao.delete(id);
            }catch (Exception e){
                return false;
            }
            return true;
        });
    }

    @Override
    public void check(int id) {
        JDBI.useExtension(TodoDao.class,dao->dao.check(id));
    }
}
